全表扫描 all: 走数据表:explain select * from my_schema.my_table; 走数据表:explain select /*+ INDEX(my_schema.my_table my_index) */ * from my_schema.my_table;
走index表:explain select col4 from my_schema.my_table where sex=1;
走数据表:explain select date,col5,sex from my_schema.my_table where sex=1;
强制走index 走index表:explain select /*+ INDEX(my_schema.my_table my_index) */ col5 from my_schema.my_table where sex=1;
走数据表:explain select /*+ INDEX(my_schema.my_table my_index) */ col5 from my_schema.my_table ;
函数索引
其索引不局限于列,可以合适任意的表达式来创建索引,当在查询时用到了这些表达式时就直接返回表达式结果
1 2 3 4 5 6
使用UPPER函数创建函数索引使查询出的USERID和URL里字母都是大写的
创建函数索引 CREATE INDEX UPPER_NAME_IDX ON EMP (UPPER(FIRST_NAME||' '||LAST_NAME)) 查询 SELECT EMP_ID FROM EMP WHERE UPPER(FIRST_NAME||' '||LAST_NAME)='JOHN DOE'
可变索引
前面所有的表和索引都是可变索引
基于表属性设置可变 index默认就是 可变
不可变索引
基于表属性设置不可变 index默认就是不可变 append 这种场景是业务表-登录log日志表
建表这个参数【IMMUTABLE_ROWS】平时不要加
1 2 3 4 5 6 7 8 9
--不可变的预分区表 create table my_table (id integer primary key, name varchar, age integer, address varchar) IMMUTABLE_ROWS=TRUE split on (1, 2, 3);
--创建不可变索引 CREATE INDEX my_index ON my_table(name,age) include(address);